package org.dromara.device.domain.bo;

import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.device.domain.DeviceConfig;

import java.io.Serial;

/**
 * 设备管理-设备配置信息业务对象 device_config
 *
 * @author samuel
 * @date 2024-03-21
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = DeviceConfig.class, reverseConvertGenerate = false)
public class DeviceConfigBo extends TenantEntity {


    @Serial
    private static final long serialVersionUID = 7818495094874796876L;
    /**
     * 设备id
     */
    @NotNull(message = "设备id不能为空", groups = { EditGroup.class })
    private Long deviceId;
    /**
     * 租户编号
     */
    private String tenantId;
    /**
     * 设备唯一序列号（超管配置，设备新增时检索有没有用户输入的sn设备，有的话配置store_id字段）
     */
    @NotBlank(message = "设备唯一序列号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String deviceSn;

    /**
     * 密钥id（超管配置）
     */
    @NotBlank(message = "密钥id不能为空", groups = { AddGroup.class, EditGroup.class })
    private String appId;

    /**
     * 密钥key（超管配置）
     */
    @NotBlank(message = "密钥key不能为空", groups = { AddGroup.class, EditGroup.class })
    private String appSecret;

    /**
     * 公钥（超管配置）
     */
    @NotBlank(message = "公钥不能为空", groups = { AddGroup.class, EditGroup.class })
    private String publicKey;

    /**
     * 私钥（超管配置）
     */
    @NotBlank(message = "私钥不能为空", groups = { AddGroup.class, EditGroup.class })
    private String privateKey;

    /**
     * 客户端类型（超管配置）
     */
    @NotBlank(message = "客户端类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String clientType;

    /**
     * 接口版本（字典表：1：1.0，2：2.0）（超管配置）
     */
    @NotBlank(message = "接口版本（字典表：1：1.0，2：2.0）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String apiVersion;

    /**
     * 企业主号码（超管配置）
     */
    @NotBlank(message = "企业主号码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String phone;

    /**
     * 设备名称（用户输入）
     */
    // @NotBlank(message = "设备名称（用户输入）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String name;

    /**
     * 告警信息回调地址 （超管配置）
     */
    @NotBlank(message = "告警信息回调地址不能为空", groups = { AddGroup.class, EditGroup.class })
    private String callBackUrl;

    /**
     * 设备型号（超管配置）
     */
    @NotBlank(message = "设备型号（超管配置）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String type;

    /**
     * 固件版本（超管配置）
     */
    @NotBlank(message = "固件版本（超管配置）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String softVersion;

    /**
     * 内网ip（超管配置）
     */
    // @NotBlank(message = "内网ip（超管配置）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String ip;

    /**
     * 端口（超管配置）
     */
    // @NotNull(message = "端口（超管配置）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long port;

    /**
     * 外网ip（超管配置）
     */
    // @NotBlank(message = "外网ip（超管配置）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String publicIp;

    /**
     * 外网端口（超管配置）
     */
    // @NotNull(message = "外网端口（超管配置）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long publicPort;

    /**
     * 外网url（超管配置）
     */
    // @NotBlank(message = "外网url（超管配置）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String url;

    /**
     * 回看host地址（超管配置）
     */
    // @NotBlank(message = "回看host地址（超管配置）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String replayHost;

    /**
     * 回看prot端口（超管配置）
     */
    // @NotNull(message = "回看端口不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long replayPort;

    /**
     * 外网loginKey（超管配置）
     */
    // @NotBlank(message = "外网loginKey不能为空", groups = { AddGroup.class, EditGroup.class })
    private String loginKey;

    /**
     * 设备型号（超管配置）
     */
    // @NotBlank(message = "设备型号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String model;

    /**
     * 是否可见（用户配置：0 可见 1 不可见）
     */
    // @NotBlank(message = "是否可见（用户配置：0 可见 1 不可见）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String display;

    /**
     * 是否可云控（用户配置：0 可控 1 不可控）
     */
    // @NotBlank(message = "是否可云控（用户配置：0 可控 1 不可控）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String control;

    /**
     * 绑定时间戳（绑定门店时自动生成）
     */
    // @NotNull(message = "绑定时间戳（绑定门店时自动生成）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long bingTime;

    /**
     * 设备类型(用户配置，字典表：视频设备 NOT_FLOW，进店客流设备 INDOOR，过店客流设备 OUTDOOR，存储设备 STORAGE，关注度设备 ATTENTION_EQT，进过店设备 IN_AND_OUT)
     */
    // @NotBlank(message = "设备类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String deviceArea;

    /**
     * 设备能力id（设备能力表device_capability_id）
     */
    // @NotNull(message = "设备能力id（设备能力表device_capability_id）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long deviceCapabilityId;

    /**
     * 制造商编码（超管配置）
     */
    // @NotBlank(message = "制造商编码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String manufacturerCode;

    /**
     * 热点背景图片（超管配置）
     */
    // @NotBlank(message = "热点背景图片不能为空", groups = { AddGroup.class, EditGroup.class })
    private String hotspotBgImg;

    /**
     * 位置（超管配置）
     */
    // @NotBlank(message = "位置不能为空", groups = { AddGroup.class, EditGroup.class })
    private String position;

    /**
     * 媒体来源（超管配置）
     */
    // @NotBlank(message = "媒体来源不能为空", groups = { AddGroup.class, EditGroup.class })
    private String mediaSource;

    /**
     * 直播流地址（超管配置）
     */
    // @NotBlank(message = "直播流地址不能为空", groups = { AddGroup.class, EditGroup.class })
    private String playUrl;

    /**
     * 进出方向（超管配置）
     */
    // @NotBlank(message = "进出方向不能为空", groups = { AddGroup.class, EditGroup.class })
    private String inOutDirection;

    /**
     * 扩展设备信息（超管配置）
     */
    // @NotBlank(message = "扩展设备信息不能为空", groups = { AddGroup.class, EditGroup.class })
    private String extendDeviceRel;

    /**
     * 门店id（用户配置，设备配置时必选项，删除设备是清空该字段）
     */
    // @NotNull(message = "门店id（用户配置，设备配置时必选项，删除设备是清空该字段）不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long storeId;

    /**
     * 参数拼接字符串（超管配置）
     */
    // @NotBlank(message = "参数拼接字符串（超管配置）不能为空", groups = { AddGroup.class, EditGroup.class })
    private String args;

    /**
     * 当前状态(0在线 1离线)
     */
    // @NotBlank(message = "当前状态(0在线 1离线)不能为空", groups = { AddGroup.class, EditGroup.class })
    private String status;
    private String version;

    /**
     * 上次在线时间
     */
    // @NotNull(message = "上次在线时间不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long lastOnlineTime;

    /**
     * 0 在线 1：不在线
     */
    public static final String ONLINE = "0";
}
